home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Network Support Library
/
RoseWare - Network Support Library.iso
/
apidev
/
nacs.arc
/
NACSLOOP.C
< prev
next >
Wrap
Text File
|
1989-09-26
|
4KB
|
140 lines
/* NACSLOOP.C
*
*
* ARGUMENT:
* None
*
* DESRCIPTION:
* This sample program provides the capability to transmit and receive
* characters via NASI and NACS.
*
* RETURNS:
* None
*
* AUTHOR:
* Kamy Rahimi 17-JUN-1989 14:45:24.94
* Copyright (C) 1989 Novell, Inc. CPD
*
*
* MODIFICATIONS:
*
*/
#include <stdio.h>
#include <conio.h>
#include <memory.h>
#include <process.h>
#define ON 1
#define OFF 0
#define ESC 27
#define MIN_NAME_LEN 8
#define MAX_NAME_LEN 14
typedef struct {
int BuffLength;
char ServerName[MIN_NAME_LEN];
char GeneralName[MIN_NAME_LEN];
char SpecificName[MAX_NAME_LEN];
} NACSPort;
typedef struct {
int length; /* length of request buffer */
int portID; /* logical port ID */
int RXDataRate; /* RX data rate */
int RXWordLength; /* RX word length */
int RXStopBit; /* RX stop bit */
int RXParity; /* RX parity */
int TXDataRate; /* TX data rate */
int TXWordLength; /* TX word length */
int TXStopBit; /* TX stop bit */
int TXParity; /* TX parity */
int dtr; /* DTR */
int rts; /* RTS */
} PortConfig;
extern int IsNasiLoaded (void);
extern char AllocateCircuit (void);
extern NACSPort *QueryName (char, NACSPort far *);
extern int VirtualCircuitConfig (int, PortConfig far *,int);
extern int InitVirtualCircuit (char, NACSPort far *);
extern int RXStatus (char);
extern int NASIRead (char, char *, int);
extern int TXStatus (char);
extern int NASIWrite (char, char *, int);
extern int NASIDisconnect (int);
#ifdef LINT_ARGS
void main(void);
#endif
void main()
{
char key;
char VCircuitNum;
NACSPort *dport;
PortConfig *config;
int i, NumOfChars;
char ReceiveBuff[512];
char TransmitBuff[512];
printf("\nNACSLOOP.EXE - A Simple NASI Application\n");
printf("Copyright (C) 1989 Novell, Inc. CPD\n");
printf("\nLoops one character at a time through NACS. Press ESC to exit.\n\n");
if (!IsNasiLoaded()) {
printf("NASI is NOT loaded, load it and try again.\n\n");
exit(1);
}
if ( (VCircuitNum=AllocateCircuit()) < 0 ){
printf("No Virtual Circuit Available.\n");
exit(2);
}
dport->BuffLength = sizeof(NACSPort) - sizeof(int);
memcpy (dport->ServerName, "BAY-NACS", MIN_NAME_LEN );
memcpy (dport->GeneralName, "????????", MIN_NAME_LEN );
memcpy (dport->SpecificName, "??????????????", MAX_NAME_LEN );
if ( (dport=QueryName(VCircuitNum,(NACSPort far *)dport)) < 0 ){
printf("Error - No Record Found.\n");
exit(3);
}
printf("\nServer Name\tGeneral Name\tSpecific Name");
printf("\n-----------\t------------\t-------------");
printf("\n%.8s\t%.8s\t%.14s\n\n",
dport->ServerName, dport->GeneralName, dport->SpecificName);
VirtualCircuitConfig (VCircuitNum, (PortConfig far *)config, 1);
/* Change the configuration if you need to */
config->length = 0xC; /* length of request buffer */
config->portID = VCircuitNum;
config->RXDataRate = 10; /* RX data rate - 2400 */
config->TXDataRate = 10; /* TX data rate - 2400 */
config->dtr = ON; /* DTR */
config->rts = ON; /* RTS */
VirtualCircuitConfig (VCircuitNum, (PortConfig far *)config, 0);
do {
} while ( InitVirtualCircuit (VCircuitNum, (NACSPort far *)dport) == -1 );
for (key=0; key!=ESC; ) {
if (RXStatus (VCircuitNum) >= 0){
if ( (NumOfChars=NASIRead(VCircuitNum, ReceiveBuff, 1)) != -1 ) /* one char at a time */
for (i=0; i<NumOfChars; i++)
putchar ( (char)ReceiveBuff[i] );
}
if ( kbhit() && (key=(char)getch())!=ESC ){
memcpy ((char *)TransmitBuff, (char *)&key, 1);
if (TXStatus (VCircuitNum) >= 0)
NASIWrite (VCircuitNum, TransmitBuff, 1);
}
}
NASIDisconnect (VCircuitNum);
exit(0);
}